Manual desk check testing, also known as manual program tracing, and its derivative, the interleaving review technique, are well known in the art and are used for early error detection or finding faults (bugs) during code inspections. Values of variables are tracked manually using pencil and paper as the reviewer inspects the code step-by-step, calculating the program state after a program statement “executes”. Though cost effective, this process is tedious.
During desk checking, the program is assumed to be in some state. However, as concurrent and/or distributed programs can be nondeterministic, the state after execution will depend on which process executed. Checking every possible combination of execution order entails too many choices. Furthermore, when considering all the possible paths over the course of program execution, the space of possible program schedules, or the space of possible interleavings, becomes exponential. This also leads to the creation of too many choices to be sure which subset of schedules to review. Finally, it is no longer sufficient to consider local program states that belong to only one process or thread. The state of the concurrent and/or distributed program is determined by the state of all its processes and their interrelated temporal dependencies.
Debuggers support the exploration of code in a way similar to desk checking, but require that the entire environment be available and set up. This is often not the case in typical software projects at early stages of the development process. At times, the code is available before the hardware. In addition, generally, not all the software components are ready at the same time. Other possible reasons that the entire environment is not available are possible, for example, the complete environment is available only remotely from the development location. An incomplete environment requires writing scaffold tests, resulting in large amounts of unusable code. Alternatively, testing is delayed until a complete environment is available, thus missing the opportunity to test early.